Software engineers typically spend substantial amounts of time debugging code, often using fairly sophisticated integrated development environments (IDEs) with built-in debuggers. In many cases, the debugger user interface provides a number of different windows or views concurrently, such as separate windows for showing the call stack of the current thread, breakpoint lists, variable values, source code file contents, and so on. While the numerous windows or perspectives into the debugged program may provide very useful information, the workspaces (e.g., computer displays) being used during debugging sessions may typically become rather busy or full, with little additional room for new GUI components.
In some scenarios, debugger users may wish to revisit certain parts of the program being debugged, often more than once as they try to determine the root cause of a complex problem. Depending on the specific debugger and user interface, the available mechanisms to revisit or re-run certain parts of the code may sometimes result in a proliferation of potentially distracting additional windows, panels, or other GUI components. Furthermore, in some cases, the user interfaces may force the user to perform multiple actions (e.g., multiple mouse clicks) to implement some fairly frequently needed debugging operations, resulting in longer, potentially less productive and more irksome debugging sessions.